home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / tools / sxpsm03 / sxpsm03.lzh / SOURCE / psm.has < prev    next >
Text File  |  1997-05-26  |  13KB  |  681 lines

  1.  
  2.     .include    iocscall.mac
  3.     .include    doscall.mac
  4.  
  5. PORT_A        equ    $e9a001
  6. PORT_B        equ    $e9a003
  7. PORT_C        equ    $e9a005
  8. PORT_CTRL    equ    $e9a007
  9.  
  10. PS_SEL        equ    0
  11. PS_CLK        equ    1
  12. PS_CMD        equ    2
  13. PS_DASEL    equ    3
  14.  
  15.     .xdef    _psm_init
  16.     .xdef    _psm_end
  17.     .xdef    _psm_mctype
  18.     .xdef    _psm_bread
  19.     .xdef    _psm_bwrite
  20.  
  21.  
  22. *    オフセット設定~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  23.     .offset    4            *    ローカルエリア = a6
  24. retry:        .ds.l    1        *    リトライ回数
  25. a6offset:
  26.  
  27.     .offset    8            *    C言語との引き数の受け渡し
  28. blkadr:        .ds.l    1        *    ブロックアドレス
  29. flnumber:    .ds.l    1        *    読み込むフレーム数
  30. waittime:    .ds.l    1        *    大ウエイト
  31. waittime2:    .ds.l    1        *    小ウエイト
  32. psmaddress:    .ds.l    1        *    格納アドレス
  33. waittime3:    .ds.l    1        *    新ウエイト
  34.  
  35.     .offset    8            *    C言語との引き数の受け渡し
  36. localmem:    .ds.l    1
  37.  
  38.     .offset    8            *    C言語との引き数の受け渡し
  39. portuse:    .ds.l    1
  40.  
  41.     .text
  42.     .even
  43.  
  44. *    サブルーチン~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  45. *    ポート設定
  46.  
  47. _psm_init:
  48.     link    a6,#-a6offset
  49.     movem.l    d3-d7/a3-a5,-(sp)
  50.  
  51.     clr.l    -(sp)
  52.     DOS    _SUPER
  53.     addq.l    #4,sp
  54.  
  55.     tst.l    (portuse,a6)            *    使用ポート設定
  56.     bne    @f
  57.  
  58.     move.l    #PORT_A,portadr            *    初期化する
  59.     move.w    #4,w1+2
  60.     move.w    #4,w2+2
  61.     move.b    #%1000_1010,PORT_CTRL
  62.     move.b    #%0000_1000,PORT_A
  63.     bra    1f
  64.  
  65. @@:    move.l    #PORT_B,portadr            *    初期化する
  66.     move.w    #5,w1+2
  67.     move.w    #5,w2+2
  68.     move.b    #%1001_1000,PORT_CTRL
  69.     move.b    #%0000_1000,PORT_B
  70.  
  71. 1:    move.l    d0,-(sp)
  72.     DOS    _SUPER
  73.     addq.l    #4,sp
  74.  
  75.     movem.l    (sp)+,d3-d7/a3-a5
  76.     unlk    a6
  77.     rts
  78.  
  79. portadr:    .dc.l    PORT_A                *    使用ポートアドレス
  80.  
  81. *    サブルーチン~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  82. *    ポート設定解除
  83.  
  84. _psm_end:
  85.     movem.l    d3-d7/a3-a5,-(sp)
  86.  
  87.     clr.l    -(sp)
  88.     DOS    _SUPER
  89.     addq.l    #4,sp
  90.  
  91.     move.b    #%1001_0010,PORT_CTRL        *    初期化する
  92.     move.b    #%0000_1000,PORT_CTRL
  93.  
  94.     move.l    d0,-(sp)
  95.     DOS    _SUPER
  96.     addq.l    #4,sp
  97.  
  98.     movem.l    (sp)+,d3-d7/a3-a5
  99.     rts
  100.  
  101. *    サブルーチン~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  102. *    メモリタイプ選定
  103. *    out: 1=new type 0=old type
  104. _psm_mctype:
  105.     link    a6,#-a6offset
  106.     movem.l    d3-d7/a3-a5,-(sp)
  107.     move.l    portadr,a4
  108.  
  109.     moveq    #0,d2
  110.     lea    typedat,a1
  111.     bsr    psm_fread
  112.     clr.l    d0            *    old type
  113.     tst.b    d3
  114.     beq    @f
  115.     moveq    #1,d0            *    new type
  116.  
  117. @@:    move.b    #%0000_1000,(a4)    *    正常終了
  118.     move.w    d0,mctype
  119.     movem.l    (sp)+,d3-d7/a3-a5
  120.     unlk    a6
  121.     rts
  122.  
  123. typedat:    .ds.b    128
  124.     .even
  125.  
  126. mctype:        .dc.w    0
  127.  
  128. *    サブルーチン~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  129. *    メモリカードから1ブロック読み込む
  130.  
  131. _psm_bread:
  132.     link    a6,#-a6offset
  133.     movem.l    d3-d7/a3-a5,-(sp)
  134.     move.l    portadr,a4
  135.  
  136.     move.w    #6,(-retry,a6)            *    初期設定
  137.  
  138.     move.l    (flnumber,a6),d4        *    1ブロック読み出す
  139.     move.l    (blkadr,a6),d5
  140.     clr.w    d7
  141.     movea.l    (psmaddress,a6),a1
  142.  
  143.     tst.w    mctype                *    メモリカードのタイプ判定
  144.     bne    2f
  145.  
  146.     *    old type のメモリカード処理
  147. 1:    move.w    #$2e,d1
  148. @@:    *IOCS    _B_PUTC
  149.     addq.w    #1,d7
  150.     move.w    d5,d2
  151.     bsr    psm_fread
  152.     tst.b    d3
  153.     beq    @f
  154.  
  155.     move.b    #%0000_1000,(a4)        *    エラー発生・・・やりなおし
  156.     move.l    (waittime,a6),d0
  157.     addi.l    #200,d0
  158.     move.l    d0,(waittime,a6)
  159.     move.l    (waittime2,a6),d0
  160.     addi.l    #20,d0
  161.     move.l    d0,(waittime2,a6)
  162.     subq.w    #1,(-retry,a6)
  163.     ble    emstop
  164.     move.w    #$65,d1
  165.     bra    @b
  166.  
  167. @@:    adda.l    #128,a1                *    次のフレーム準備
  168.     addq.l    #1,d5
  169.     dbra    d4,1b
  170.  
  171. @@:    move.b    d7,d1                *    文字消去
  172. *    IOCS    _B_DEL
  173.  
  174.     move.b    #%0000_1000,(a4)        *    正常終了
  175.     move.l    (psmaddress,a6),d0
  176.     movem.l    (sp)+,d3-d7/a3-a5
  177.     unlk    a6
  178.     rts
  179.  
  180. 2:    *    new type のメモリカード処理
  181. 1:    move.w    #$2e,d1
  182. @@:    *IOCS    _B_PUTC
  183.     addq.w    #1,d7
  184.     move.w    d5,d2
  185.     bsr    psm_fread2
  186.     tst.b    d3
  187.     beq    @f
  188.  
  189.     move.b    #%0000_1000,(a4)        *    エラー発生・・・やりなおし
  190.     move.l    (waittime,a6),d0
  191.     addi.l    #200,d0
  192.     move.l    d0,(waittime,a6)
  193.     move.l    (waittime2,a6),d0
  194.     addi.l    #20,d0
  195.     move.l    d0,(waittime2,a6)
  196.     subq.w    #1,(-retry,a6)
  197.     ble    emstop
  198.     move.w    #$65,d1
  199.     bra    @b
  200.  
  201. @@:    adda.l    #128,a1                *    次のフレーム準備
  202.     addq.l    #1,d5
  203.     dbra    d4,1b
  204.  
  205. @@:    move.b    d7,d1                *    文字消去
  206. *    IOCS    _B_DEL
  207.  
  208.     move.b    #%0000_1000,(a4)        *    正常終了
  209.     move.l    (psmaddress,a6),d0
  210.     movem.l    (sp)+,d3-d7/a3-a5
  211.     unlk    a6
  212.     rts
  213.  
  214. *    サブルーチン~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  215. *    メモリカードから1フレーム読み込む [old type]
  216. *    d2.w    アドレス
  217. *    a1.l    データ格納アドレス
  218. *    d3.b    終了フラグ(0=正常)
  219.  
  220. psm_fread:
  221.     movem.l    d4-d7/a1,-(sp)
  222.     move.b    #%0000_0001,(a4)    *    セレクトON
  223.  
  224.     move.b    #$81,d0            *    コマンドヘッダ
  225.     bsr    transport_byte
  226.     bsr    wait_time2
  227.     move.b    #$52,d0
  228.     bsr    transport_byte
  229.     bsr    wait_time2
  230.     move.b    #$00,d0
  231.     bsr    transport_byte
  232.     bsr    wait_time2
  233.     move.b    #$00,d0
  234.     bsr    transport_byte
  235.     bsr    wait_time2
  236.     ror.w    #8,d2
  237.     move.b    d2,d0            *    アドレス(上位)
  238.     bsr    transport_byte
  239.     bsr    wait_time2
  240.     ror.w    #8,d2
  241.     move.b    d2,d0            *    アドレス(下位)
  242.     bsr    transport_byte
  243.     bsr    wait_time2
  244.     move.b    #$00,d0            *    コマンド応答
  245.     bsr    transport_byte
  246.     bsr    wait_time
  247.     bsr    transport_byte        *    データヘッダ
  248.     bsr    wait_time2
  249.  
  250.     clr.b    d3
  251.     bsr    transport_byte        *    データアドレス(上位)
  252.     bsr    wait_time2
  253.     eor.b    d1,d3
  254.     bsr    transport_byte        *    データアドレス(下位)
  255.     bsr    wait_time2
  256.     eor.b    d1,d3
  257.  
  258.     move.w    #127,d2
  259.     tst.l    (waittime2,a6)
  260.     blt    1f
  261.  
  262. @@:    bsr    transport_byte        *    データブロック(ウエイトあり)
  263.     bsr    wait_time2
  264.     move.b    d1,(a1)+
  265.     eor.b    d1,d3
  266.     dbra    d2,@b
  267.     bra    2f
  268.  
  269. 1:    bsr    transport_byte        *    データブロック(ウエイトなし)
  270.     move.b    d1,(a1)+
  271.     eor.b    d1,d3
  272.     dbra    d2,1b
  273.  
  274. 2:    bsr    transport_byte        *    XORフラグ
  275.     bsr    wait_time
  276.     eor.b    d1,d3
  277.     bsr    transport_byte        *    終了フラグ
  278.     bsr    wait_time2
  279.  
  280.     move.b    #%0000_1000,(a4)    *    セレクトOFF
  281.     movem.l    (sp)+,d4-d7/a1
  282.     rts
  283.  
  284. *    サブルーチン~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  285. *    メモリカードから1フレーム読み込む [new type]
  286. *    d2.w    アドレス
  287. *    a1.l    データ格納アドレス
  288. *    d3.b    終了フラグ(0=正常)
  289.  
  290. psm_fread2:
  291.     movem.l    d4-d7/a1,-(sp)
  292.     move.b    #%0000_0001,(a4)    *    セレクトON
  293.     bsr    wait_time
  294.     bsr    wait_time
  295.  
  296.     move.b    #$81,d0            *    コマンドヘッダ
  297.     bsr    transport_byte2
  298.     bsr    wait_time2
  299.     move.b    #$52,d0
  300.     bsr    transport_byte2
  301.     bsr    wait_time2
  302.     move.b    #$00,d0
  303.     bsr    transport_byte2
  304.     bsr    wait_time2
  305.     move.b    #$00,d0
  306.     bsr    transport_byte2
  307.     bsr    wait_time2
  308.     ror.w    #8,d2
  309.     move.b    d2,d0            *    アドレス(上位)
  310.     bsr    transport_byte2
  311.     bsr    wait_time2
  312.     ror.w    #8,d2
  313.     move.b    d2,d0            *    アドレス(下位)
  314.     bsr    transport_byte2
  315.     bsr    wait_time2
  316.     move.b    #$00,d0            *    コマンド応答
  317.     bsr    transport_byte2
  318.     bsr    wait_time
  319.     bsr    transport_byte2        *    データヘッダ
  320.     bsr    wait_time2
  321.  
  322.     clr.b    d3
  323.     bsr    transport_byte2        *    データアドレス(上位)
  324.     bsr    wait_time2
  325.     eor.b    d1,d3
  326.     bsr    transport_byte2        *    データアドレス(下位)
  327.     bsr    wait_time2
  328.     eor.b    d1,d3
  329.  
  330.     move.w    #127,d2
  331.     tst.l    (waittime2,a6)
  332.     blt    1f
  333.  
  334. @@:    bsr    transport_byte2        *    データブロック(ウエイトあり)
  335.     bsr    wait_time2
  336.     move.b    d1,(a1)+
  337.     eor.b    d1,d3
  338.     dbra    d2,@b
  339.     bra    2f
  340.  
  341. 1:    bsr    transport_byte2        *    データブロック(ウエイトなし)
  342.     move.b    d1,(a1)+
  343.     eor.b    d1,d3
  344.     dbra    d2,1b
  345.  
  346. 2:    bsr    transport_byte2        *    XORフラグ
  347.     bsr    wait_time
  348.     eor.b    d1,d3
  349.     bsr    transport_byte2        *    終了フラグ
  350.     bsr    wait_time2
  351.  
  352.     move.b    #%0000_1000,(a4)    *    セレクトOFF
  353.     movem.l    (sp)+,d4-d7/a1
  354.     rts
  355.  
  356. *    サブルーチン~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  357. *    メモリカードから1ブロック書き込む
  358.  
  359. _psm_bwrite:
  360.     link    a6,#-a6offset
  361.     movem.l    d3-d7/a3-a5,-(sp)
  362.     move.l    portadr,a4
  363.  
  364.     move.w    #6,(-retry,a6)            *    初期設定
  365.  
  366.     move.l    (flnumber,a6),d4        *    1ブロック書き込む
  367.     move.l    (blkadr,a6),d5
  368.     clr.w    d7
  369.     movea.l    (psmaddress,a6),a1
  370.  
  371.     tst.w    mctype                *    メモリカードのタイプ判定
  372.     bne    2f
  373.  
  374.     *    old type のメモリカード処理
  375. 1:    move.w    #$2e,d1
  376. @@:    *IOCS    _B_PUTC
  377.     addq.w    #1,d7
  378.     move.w    d5,d2
  379.     bsr    psm_fwrite
  380.     .rept    5
  381.     bsr    wait_time
  382.     .endm
  383.     tst.b    d3
  384.     beq    @f
  385.  
  386.     move.b    #%0000_1000,(a4)        *    エラー発生・・・やりなおし
  387.     move.l    (waittime,a6),d0
  388.     addi.l    #400,d0
  389.     move.l    d0,(waittime,a6)
  390.     move.l    (waittime2,a6),d0
  391.     addi.l    #40,d0
  392.     move.l    d0,(waittime2,a6)
  393.     subq.w    #1,(-retry,a6)
  394.     ble    emstop
  395.     move.w    #$65,d1
  396.     bra    @b
  397.  
  398. @@:    adda.l    #128,a1                *    次のフレーム準備
  399.     addq.l    #1,d5
  400.     dbra    d4,1b
  401.  
  402. @@:    move.b    d7,d1                *    文字消去
  403. *    IOCS    _B_DEL
  404.  
  405.     move.b    #%0000_1000,(a4)        *    正常終了
  406.     move.l    (psmaddress,a6),d0
  407. @@:    movem.l    (sp)+,d3-d7/a3-a5
  408.     unlk    a6
  409.     rts
  410.  
  411. 2:    *    new type のメモリカード処理
  412. 1:    move.w    #$2e,d1
  413. @@:    *IOCS    _B_PUTC
  414.     addq.w    #1,d7
  415.     move.w    d5,d2
  416.     bsr    psm_fwrite2
  417.     .rept    5
  418.     bsr    wait_time
  419.     .endm
  420.     tst.b    d3
  421.     beq    @f
  422.  
  423.     move.b    #%0000_1000,(a4)        *    エラー発生・・・やりなおし
  424.     move.l    (waittime,a6),d0
  425.     addi.l    #400,d0
  426.     move.l    d0,(waittime,a6)
  427.     move.l    (waittime2,a6),d0
  428.     addi.l    #40,d0
  429.     move.l    d0,(waittime2,a6)
  430.     subq.w    #1,(-retry,a6)
  431.     ble    emstop
  432.     move.w    #$65,d1
  433.     bra    @b
  434.  
  435. @@:    adda.l    #128,a1                *    次のフレーム準備
  436.     addq.l    #1,d5
  437.     dbra    d4,1b
  438.  
  439. @@:    move.b    d7,d1                *    文字消去
  440. *    IOCS    _B_DEL
  441.  
  442.     move.b    #%0000_1000,(a4)        *    正常終了
  443.     move.l    (psmaddress,a6),d0
  444. @@:    movem.l    (sp)+,d3-d7/a3-a5
  445.     unlk    a6
  446.     rts
  447.  
  448. emstop:    clr.l    d0                *    異常終了
  449.     bra    @b
  450.  
  451. *    サブルーチン~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  452. *    メモリカードから1フレーム書き込む
  453. *    d2.w    アドレス
  454. *    a1.l    データ格納アドレス
  455. *    d3.b    終了フラグ(0=正常)
  456.  
  457. psm_fwrite:
  458.     movem.l    d4-d7/a1,-(sp)
  459.     move.b    #%0000_0001,(a4)    *    セレクトON
  460.  
  461.     move.b    #$81,d0            *    コマンドヘッダ
  462.     bsr    transport_byte
  463.     bsr    wait_time2
  464.     move.b    #$57,d0
  465.     bsr    transport_byte
  466.     bsr    wait_time2
  467.     move.b    #$00,d0
  468.     bsr    transport_byte
  469.     bsr    wait_time2
  470.     move.b    #$00,d0
  471.     bsr    transport_byte
  472.     bsr    wait_time2
  473.  
  474.     clr.b    d3
  475.     ror.w    #8,d2
  476.     move.b    d2,d0            *    アドレス(上位)
  477.     eor.b    d0,d3
  478.     bsr    transport_byte
  479.     bsr    wait_time2
  480.     ror.w    #8,d2
  481.     move.b    d2,d0            *    アドレス(下位)
  482.     eor.b    d0,d3
  483.     bsr    transport_byte
  484.     bsr    wait_time2
  485.  
  486.     move.w    #127,d2
  487.     tst.l    (waittime2,a6)
  488.     blt    1f
  489.  
  490. @@:    move.b    (a1)+,d0        *    データブロック(ウエイトあり)
  491.     eor.b    d0,d3
  492.     bsr    transport_byte
  493.     bsr    wait_time2
  494.     dbra    d2,@b
  495.     bra    2f
  496.  
  497. 1:    move.b    (a1)+,d0        *    データブロック(ウエイトなし)
  498.     eor.b    d0,d3
  499.     bsr    transport_byte
  500.     dbra    d2,1b
  501.  
  502. 2:    move.b    d3,d0            *    XORフラグ
  503.     bsr    transport_byte
  504.     bsr    wait_time2
  505.     move.b    #$00,d0            *    終了ステータス
  506.     bsr    transport_byte
  507.     bsr    wait_time2
  508.     move.b    #$00,d0
  509.     bsr    transport_byte
  510.     bsr    wait_time2
  511.     move.b    #$00,d0            *    終了フラグ
  512.     bsr    transport_byte
  513.     bsr    wait_time
  514.     move.b    d1,d3
  515.     eor.b    #$47,d3
  516.  
  517.     move.b    #%0000_1000,(a4)    *    セレクトOFF
  518.     movem.l    (sp)+,d4-d7/a1
  519.     rts
  520.  
  521. *    サブルーチン~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  522. *    メモリカードから1フレーム書き込む
  523. *    d2.w    アドレス
  524. *    a1.l    データ格納アドレス
  525. *    d3.b    終了フラグ(0=正常)
  526.  
  527. psm_fwrite2:
  528.     movem.l    d4-d7/a1,-(sp)
  529.     move.b    #%0000_0001,(a4)    *    セレクトON
  530.     bsr    wait_time
  531.     bsr    wait_time
  532.  
  533.     move.b    #$81,d0            *    コマンドヘッダ
  534.     bsr    transport_byte2
  535.     bsr    wait_time2
  536.     move.b    #$57,d0
  537.     bsr    transport_byte2
  538.     bsr    wait_time2
  539.     move.b    #$00,d0
  540.     bsr    transport_byte2
  541.     bsr    wait_time2
  542.     move.b    #$00,d0
  543.     bsr    transport_byte2
  544.     bsr    wait_time2
  545.  
  546.     clr.b    d3
  547.     ror.w    #8,d2
  548.     move.b    d2,d0            *    アドレス(上位)
  549.     eor.b    d0,d3
  550.     bsr    transport_byte2
  551.     bsr    wait_time2
  552.     ror.w    #8,d2
  553.     move.b    d2,d0            *    アドレス(下位)
  554.     eor.b    d0,d3
  555.     bsr    transport_byte2
  556.     bsr    wait_time2
  557.  
  558.     move.w    #127,d2
  559.     tst.l    (waittime2,a6)
  560.     blt    1f
  561.  
  562. @@:    move.b    (a1)+,d0        *    データブロック(ウエイトあり)
  563.     eor.b    d0,d3
  564.     bsr    transport_byte2
  565.     bsr    wait_time2
  566.     dbra    d2,@b
  567.     bra    2f
  568.  
  569. 1:    move.b    (a1)+,d0        *    データブロック(ウエイトなし)
  570.     eor.b    d0,d3
  571.     bsr    transport_byte2
  572.     dbra    d2,1b
  573.  
  574. 2:    move.b    d3,d0            *    XORフラグ
  575.     bsr    transport_byte2
  576.     bsr    wait_time2
  577.     move.b    #$00,d0            *    終了ステータス
  578.     bsr    transport_byte2
  579.     bsr    wait_time2
  580.     move.b    #$00,d0
  581.     bsr    transport_byte2
  582.     bsr    wait_time2
  583.     move.b    #$00,d0            *    終了フラグ
  584.     bsr    transport_byte2
  585.     bsr    wait_time
  586.     move.b    d1,d3
  587.     eor.b    #$47,d3
  588.  
  589.     move.b    #%0000_1000,(a4)    *    セレクトOFF
  590.     movem.l    (sp)+,d4-d7/a1
  591.     rts
  592.  
  593. *    サブルーチン~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  594. *    1バイトのコマンド転送を行なうと同時にデータ入力する
  595. *        d0.b    コマンド(出力)
  596. *        d1.b    データ(入力)
  597.  
  598. transport_byte:
  599.     movem.l    d2-d5,-(sp)
  600.     moveq    #7,d2
  601.     moveq    #0,d5
  602.     moveq    #0,d1
  603.  
  604. 2:    btst    d5,d0            *    CMD 設定
  605.     beq    @f
  606.     move.b    #%0000_0011,(a4)    *    SEL = L : CMD = X : CLK = L : DAT = X
  607.     moveq    #%0000_0001,d3
  608.     bra    1f
  609. @@:    move.b    #%0000_0111,(a4)    *    SEL = L : CMD = X : CLK = L : DAT = X
  610.     moveq    #%0000_0101,d3
  611.  
  612. 1:                    *    ウエイト
  613.  
  614.     move.b    PORT_C,d4        *    DAT 入力
  615. w1:    btst    #4,d4
  616.     beq    @f
  617.     bset    d5,d1
  618. @@:    addq.w    #1,d5
  619.  
  620.     move.b    d3,(a4)            *    SEL = L : CMD = X : CLK = H : DAT = X
  621.  
  622.     dbra    d2,2b            *    8ビット行なう
  623.  
  624.     movem.l    (sp)+,d2-d5
  625.     rts
  626.  
  627. *    サブルーチン~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  628. *    1バイトのコマンド転送を行なうと同時にデータ入力する
  629. *        d0.b    コマンド(出力)
  630. *        d1.b    データ(入力)
  631.  
  632. transport_byte2:
  633.     movem.l    d2-d5,-(sp)
  634.     moveq    #7,d2
  635.     moveq    #0,d5
  636.     moveq    #0,d1
  637.  
  638. 2:    btst    d5,d0            *    CMD 設定
  639.     beq    @f
  640.     move.b    #%0000_0011,(a4)    *    SEL = L : CMD = X : CLK = L : DAT = X
  641.     moveq    #%0000_0001,d3
  642.     bra    1f
  643. @@:    move.b    #%0000_0111,(a4)    *    SEL = L : CMD = X : CLK = L : DAT = X
  644.     moveq    #%0000_0101,d3
  645.  
  646. 1:    bsr    wait_time3        *    ウエイト
  647.  
  648.     move.b    PORT_C,d4        *    DAT 入力
  649. w2:    btst    #4,d4
  650.     beq    @f
  651.     bset    d5,d1
  652. @@:    addq.w    #1,d5
  653.  
  654.     move.b    d3,(a4)            *    SEL = L : CMD = X : CLK = H : DAT = X
  655.  
  656.     dbra    d2,2b            *    8ビット行なう
  657.  
  658.     movem.l    (sp)+,d2-d5
  659.     rts
  660.  
  661. *    サブルーチン~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  662. *    ウエイト
  663. wait_time:
  664.     move.l    (waittime,a6),d6
  665. @@:    subq.l    #1,d6
  666.     bgt    @b
  667.     rts
  668.  
  669. wait_time2:
  670.     move.l    (waittime2,a6),d6
  671. @@:    dbra    d6,@b
  672.     rts
  673.  
  674. wait_time3:
  675.     move.l    (waittime3,a6),d6
  676. @@:    dbra    d6,@b
  677.     rts
  678.  
  679.     .end
  680.  
  681.